import request from '@/config/axios'

// 出差申请 VO
export interface BusinessTripApplyVO {
  id?: number // 序号
  startTime?: string // 开始时间（日期）
  startHour?: string // 开始时间（时刻）
  endTime?: string // 结束时间（日期）
  endHour?: string // 结束时间（时刻）
  startType?: number // 开始时间类型 1-上午 2-下午（兼容旧数据）
  endType?: number // 结束时间类型 1-上午 2-下午（兼容旧数据）
  duration?: number // 出差时长（小时）
  destination?: string // 出差地点
  tripReason?: string // 出差事由
  transportation?: string // 交通工具
  budgetAmount?: number // 预算金额
  accompanyPersons?: any // 同行人员
  accompanyPersonsNames?: string // 同行人员姓名
  appendix?: string // 附件
  status?: number // 状态
  files?: string // 文件
  startUserSelectAssignees?: Record<string, any[]> // 审批人选择
}

// 出差时长计算请求VO
export interface BusinessTripDurationCalcReqVO {
  startTime: string
  startType: number
  endTime: string
  endType: number
}

// 出差时长计算响应VO
export interface BusinessTripDurationCalcRespVO {
  day: number
  hours: number
}

// 出差申请 API
export const BusinessTripApplyApi = {
  // 查询出差申请分页
  getBusinessTripApplyPage: async (params: any) => {
    return await request.get({ url: `/oa/business-trip-apply/page`, params })
  },

  // 查询出差申请详情
  getBusinessTripApply: async (id: number) => {
    return await request.get({ url: `/oa/business-trip-apply/get?id=` + id })
  },

  // 计算出差时长（新接口）
  calculateBusinessTripDuration: async (params: BusinessTripDurationCalcReqVO): Promise<BusinessTripDurationCalcRespVO> => {
    return await request.get({ url: `/oa/business-trip-apply/calculate-business-trip-duration`, params })
  },

  // 计算出差时长（旧接口，保留兼容性）
  calculateDuration: async (startDate: any, endDate: any) => {
    return await request.get({ url: `/oa/business-trip-apply/calculate-duration?startDate=${startDate}&endDate=${endDate}` })
  },

  // 新增出差申请
  createBusinessTripApply: async (data: BusinessTripApplyVO) => {
    return await request.post({ url: `/oa/business-trip-apply/create`, data })
  },

  // 修改出差申请
  updateBusinessTripApply: async (data: BusinessTripApplyVO) => {
    return await request.put({ url: `/oa/business-trip-apply/update`, data })
  },

  // 删除出差申请
  deleteBusinessTripApply: async (id: number) => {
    return await request.delete({ url: `/oa/business-trip-apply/delete?id=` + id })
  },

  // 导出出差申请 Excel
  exportBusinessTripApply: async (params) => {
    return await request.download({ url: `/oa/business-trip-apply/export-excel`, params })
  },

  // 统计指定用户本年度每月审核通过的出差申请数量
  getMonthlyApprovedCountByUser: async (userId: number, year: number) => {
    return await request.get({ url: `/oa/business-trip-apply/monthly-statistics`, params: { userId, year } })
  },

  // 计算出差时长（基于具体时间，按24小时累计真实小时数）
  calculateDurationByTime: async (startDate: string, startHour: string, endDate: string, endHour: string): Promise<number> => {
    return await request.get({
      url: `/oa/business-trip-apply/calculate-duration-by-time`,
      params: { startDate, startHour, endDate, endHour }
    })
  },
}
